The I2C protocol is a communication protocol of the priority logic state type. The I2C bus makes it possible for highly diverse electronic modules to communicate with one another using only two wires or lines. One wire is for a data signal (SDA: “Serial Data”) and one wire is for a clock signal (SCL: “Serial Clock”). Although the bus also comprises a wire for a ground signal and a power supply wire, it is nevertheless referred to as a two-wire bus. The interfaces of the modules connected to the SDA wire and to the SCL wire are of collector or open drain type imposing a priority logic state on the corresponding wire. Generally, there is also provided, conventionally and as is known per se, a pull-up resistor connected between the power supply voltage Vdd, for example 5 volts, and the I2C bus.
In such a configuration, the priority logic state on the I2C bus is a logic “0”. The pull-up resistor(s) allow the data line of the bus or the clock line to be at the high logic level (“1” logic level) if all the outputs (drains) of the interfaces are also at the 1 level. On the other hand, if at least one output of an output stage imposes a low level on the line of the bus (the corresponding transistor is passing), this will lead to a low level (“0” logic level) on the corresponding line, regardless of the levels of the drains of the other output stages.
The characteristics of the I2C bus and of the I2C protocol are well known to the person skilled in the art. For all useful purposes the person skilled in the art will be able to refer in particular to the document published by the company NXP Semiconductors, available notably on the Internet, and entitled “UM10204, I2C-bus specification and user manual”, Rev. 4-13 February 2012.
An I2C bus can link a master circuit or module to one or more slave circuits. There are also I2C buses that connect two master circuits to a plurality of slave circuits. In this case, one of the master circuits must behave as a slave circuit.
The master and the slaves exchange data according to transactions defined in the I2C protocol.
In a normal situation, on buses with at least two wires with priority logic level, there is no conflict on the lines of the bus. In practice, when a slave circuit wants to impose the priority logic level on the bus (the “0” level), the transistor of the interface pulls the corresponding line to the ground and the transistors of the other slave circuits are blocked. Because of this, given the presence of the pull-up resistors, a predetermined voltage is then established on the bus, typically of the order of 250 millivolts, which is perfectly acceptable for the slave circuit.
However, in certain cases, a conflict may occur on one of the lines of the bus.
Such is the case when the line is forced, externally to the slave circuit which is in the process of wanting to impose the priority logic level on a line of the bus, to the other logic level (in this case the “1” logic level).
Such a case can occur, for example, when a master circuit manages an I2C bus to which hot plug-in removable peripheral devices can be connected. Such is the case, for example, of a printer equipped with ink cartridges each having an I2C micromodule with four contacts (Vdd, ground, SDA and SCL). There is then a possibility of short-circuiting the SDA line and/or the SCL line to the power supply voltage Vdd on an incorrect insertion. In such a case, the pull-up resistor of the line concerned is then short-circuited and the voltage on the line concerned becomes very great as does the current which will circulate in the transistor of the slave circuit which was trying to impose the priority logic level (logic “0”).
A conflict may also occur when the slave circuit is subject to significant noise because of its environment.
As an indication, in the case of conflict, the short-circuit current can exceed 200 milliamperes at 5 volts. This can then result in a rapid destruction of the circuit by melting of the solder joints and/or of the contacts or else a slower destruction of the circuit by electro-migration or even more or less rapid damage to the circuit by overheating or even a blocking of the circuit because of the noise generated on the ground power supply.
Also, these risks have become particularly significant with the introduction of a particular mode of the I2C bus which is the mode called “fast-mode plus”. This is because this mode imposes output stages with a much lower impedance than that required for the conventional modes, which can result in very much higher short-circuit currents.